-
- #define F_CPU 8000000UL
-
- #include <avr/io.h>
- #include <stdio.h>
- #include <inttypes.h>
- #include <stdint.h>
- #include <avr/pgmspace.h>
- #include <avr/interrupt.h>
- #include <util/delay.h>
- #include <util/atomic.h>
-
- #define BAUDRATE 9600
-
- #define NTCBETA 3600
-
- #define ONTEMP 4.0 // °C
- #define OFFTEMP 2.0 // °C
-
- #define ONTIME 60 // sec
- #define OFFTIME 180 // sec
-
- // attiny48
- // pins
- // 1 : PB5 reset, ADC0
- // 2 : PB3 ADC3 / COMPRESSOR
- // 3 : PB4 ADC2 / CAP
- // 4 : gnd
- // 5 : PB0 Mosi, AREF
- // 6 : PB1 Miso / TX
- // 7 : PB2 SCK, ADC1 / NTC
- // 8 : VCC
-
- #define COMPPIN PINB
- #define COMPDDR DDRB
- #define COMPPORT PORTB
- #define COMPBIT 3
-
- #define CAPPIN PINB
- #define CAPDDR DDRB
- #define CAPPORT PORTB
- #define CAPBIT 4
-
- #define NTCPIN PINB
- #define NTCPORT PORTB
- #define NTCDDR DDRB
- #define NTCMUX 1
- #define NTCBIT 2
-
- #define UARTTXPIN PINB
- #define UARTTXPORT PORTB
- #define UARTTXDDR DDRB
- #define UARTTXBIT 1
-
- //
- //
- //
- //
-
-
- volatile uint32_t secs = 0;
- volatile uint32_t cycles = 0;
- volatile uint8_t status = 0;
- volatile uint16_t tstatus = 0;
-
- void usart_bitdelay() {
- _delay_us(1000000/BAUDRATE); // 1e6 us / baudrate
- }
-
- void usart_putchar(char data) {
- // 0 start, LSB...MSB, 1 stop
- uint8_t i;
-
- // start bit, 0
- UARTTXPORT &= ~(1 << UARTTXBIT);
- usart_bitdelay();
-
- // 8 data bits
- for (i = 0; i < 7; i++) {
- if (data && 0x01) {
- // 1
- UARTTXPORT |= (1 << UARTTXBIT);
- } else
- // 0
- UARTTXPORT &= ~(1 << UARTTXBIT);
- }
- data = (data >> 1);
- usart_bitdelay();
- }
-
-
- // stop bit, 1
- UARTTXPORT |= (1 << UARTTXBIT);
- usart_bitdelay();
- }
-
- static FILE mystdout = FDEV_SETUP_STREAM(usart_putchar, NULL, _FDEV_SETUP_WRITE);
-
-
-
- void getTemp() {
- nop();
- }
-
- void printData() {
- uint32_t lsecs;
- uint16_t lhours;
- uint8_t lmins;
-
- uint8_t lstatus;
- uint16_t ltstatus;
-
- double ltemp;
-
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
- lsecs = secs;
- lstatus = status;
- ltstatus = tstatus;
- };
-
- lhours = lsecs / 3600;
- lsecs = lsecs - (lhours * 3600);
-
- lmins = lsecs / 60;
- lsecs = lsecs - (lmins * 60);
-
- // xx_hour : xx_min : xx_sec _ _ Temp: +/- xx.x °C _ _ Status: [_on|off|_LO|] _ _ Since: xxxxx sec \n
- printf_P("%05d:%02d:%02d ", lhours, lmins, lsecs);
- printf_P("Temperature: % 05.1f °C ", ltemp);
- printf_P("Status: %s ", lstatus);
- printf_P("Since: %5d secs\n", ltstatus);
- }
-
- int main(void) {
-
- // set compressor pin to output, set to low
- COMPDDR |= (1<<COMPPIN);
- COMPPORT &= ~(1<<COMPPIN);
-
- // set capacitor pin to input with pullup
-
-
- // set adc
-
- // set timer
-
- // set uart
-
- // wait for cap to be empty
-
- //
- printData();
-
- return(0);
- }
-